table of contents
KEXEC_LOAD(2) | Руководство программиста Linux | KEXEC_LOAD(2) |
ИМЯ¶
kexec_load - загружает новое ядро для выполнения в будущем
ОБЗОР¶
#include <linux/kexec.h>
long kexec_load(unsigned long entry, unsigned long
nr_segments,
struct kexec_segment *segments, unsigned long
flags);
ОПИСАНИЕ¶
Системный вызов kexec_load() загружает новое ядро, которое можно запустить позже с помощью reboot(2).
Аргумент flags представляет собой маску, чьи старшие биты управляют работой вызова. В flags можно указать следующие значения:
- KEXEC_ON_CRASH (начиная с Linux 2.6.13)
- Запускать новое ядро автоматически после «падения» системы.
- KEXEC_PRESERVE_CONTEXT (начиная с Linux 2.7.27)
- Сохранять аппаратное и программное состояния перед выполнением нового ядра. Может использоваться для перевода системы в состояние ожидания (suspend). Этот флаг доступен только, если ядро было собрано с параметром CONFIG_KEXEC_JUMP, и работает только, если значение nr_segments больше 0.
В младших битах flags задаётся архитектура, для которой будет выполняться ядро. Константой (через OR) KEXEC_ARCH_DEFAULT задаётся использование текущей архитектуры; также есть другие константы, описывающие архитектуры: KEXEC_ARCH_386, KEXEC_ARCH_X86_64, KEXEC_ARCH_PPC, KEXEC_ARCH_PPC64, KEXEC_ARCH_IA_64, KEXEC_ARCH_ARM, KEXEC_ARCH_S390, KEXEC_ARCH_SH, KEXEC_ARCH_MIPS и KEXEC_ARCH_MIPS_LE. Архитектура должна быть работоспособна на ЦП системы.
В
аргументе
entry
задаётся
физический
адрес
точки
входа в
образе
ядра. В
аргументе
nr_segments
задаётся
количество
сегментов,
на которые
указывает
указатель
segments. В
аргументе
segments
задаётся
массив
структур
kexec_segment,
который
определяет
разбивку
ядра:
struct kexec_segment {
void *buf; /* буфер в пользовательском пространстве */
size_t bufsz; /* размер буфера в пользовательском пространстве */
void *mem; /* физический адрес ядра */
size_t memsz; /* размер ядра */ };
Образ ядра, определённый segments, копируется из вызывающего процесса в ранее зарезервированную память.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При успешном выполнении kexec_load() возвращается 0. При ошибке возвращается -1, а в errno содержится код ошибки.
ОШИБКИ¶
ВЕРСИИ¶
Системный вызов kexec_load() впервые появился в 2.6.13.
СООТВЕТСТВИЕ СТАНДАРТАМ¶
Данный вызов есть только в Linux.
ЗАМЕЧАНИЯ¶
В настоящее время в glibc нет поддержки вызова kexec_load(). Вызывайте его через syscall(2).
Необходимые для работы константы находятся в файле исходного кода ядра linux/kexec.h, который не экспортируется в glibc. Поэтому данные константы должны определяться вручную.
Данный системный вызов доступен только, если ядро было собрано с параметром CONFIG_KEXEC.
СМОТРИТЕ ТАКЖЕ¶
2010-11-04 | Linux |